package repository

import (
	"goscan-mgt/model"
	"goscan-mgt/utils"

	"gorm.io/gorm"
)

// ServiceInfoRepository 结构体定义了与服务信息表交互的仓库
type ServiceInfoRepository struct {
	DB *gorm.DB // 数据库连接
}

// NewServiceInfoRepository 创建一个新的ServiceInfoRepository实例
func NewServiceInfoRepository() *ServiceInfoRepository {
	db := utils.GetDB() // 获取数据库连接
	return &ServiceInfoRepository{DB: db}
}

// Create 创建新的服务信息记录
func (repo *ServiceInfoRepository) Create(serviceInfo *model.ServiceInfo) error {
	return repo.DB.Create(serviceInfo).Error
}

// Update 更新服务信息记录
func (repo *ServiceInfoRepository) Update(serviceInfo *model.ServiceInfo) error {
	return repo.DB.Save(serviceInfo).Error
}

// Delete 删除服务信息记录
func (repo *ServiceInfoRepository) Delete(id uint) error {
	return repo.DB.Delete(&model.ServiceInfo{}, id).Error
}

// FindByID 根据ID查找服务信息记录
func (repo *ServiceInfoRepository) FindByID(id uint) (*model.ServiceInfo, error) {
	var serviceInfo model.ServiceInfo
	err := repo.DB.First(&serviceInfo, id).Error
	return &serviceInfo, err
}

// FindAll 查找所有服务信息记录
func (repo *ServiceInfoRepository) FindAll() ([]model.ServiceInfo, error) {
	var serviceInfos []model.ServiceInfo
	err := repo.DB.Find(&serviceInfos).Error
	return serviceInfos, err
}

// GetPaginated 获取分页服务信息列表
func (repo *ServiceInfoRepository) GetPaginated(page int, pageSize int) (*utils.Pagination[model.ServiceInfo], error) {
	dbModel := repo.DB.Model(&model.ServiceInfo{}).Order("id desc")
	result, err := utils.NewPagination[model.ServiceInfo](page, pageSize, dbModel)
	return result, err
}
